package com.hb.config;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan(basePackages = {"com.hb"}, excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})
public class RootConfig {
//    public MessageSource messageSource() {
//        // Spring 有多个信息源的类，它们都实现了 MessageSource 接口。在这些类中，更为常见和有用的是 ResourceBundleMessageSource。它会从一个属性文件中加
//        //载信息，这个属性文件的名称是根据基础名称（base name）衍生而来的。
//        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
//        // 设置 basename 其实就是设置属性文件的所在路径，所在路径也是属性文件的完整名称。
//        // 像下面这样设置为 messages 表示会试图在根路径的属性文件中解析信息，这些属性文件的名称是根据这个基础名称衍生得到的。
//        messageSource.setBasename("messages");
//        return messageSource;
//    }

    @Bean
    public MessageSource messageSource() {
        // 另外的可选方案是使用 ReloadableResourceBundleMessageSource，它的工作方式与 ResourceBundleMessageSource 非常类似，
        // 但是它能够重新加载信息属性，而不必重新编译或重启应用。
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        // 下面设置 basename 的方式是在类路径（以 “classpath:” 作为前缀）查找属性文件。除此之外还可以在文件系统（以 “ file:” 作为前缀）或 Web 应用的根路径（没有前缀）查找属性文件。
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(10);
        return messageSource;
    }
}
